{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as py\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from datetime import datetime"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "fileList = ['../data/user_action_train.txt','../data/goods_train.txt']\n",
    "import data_clean as dc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "'module' object has no attribute 'get_user_action_data'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m\u001b[0m",
      "\u001b[0;31mAttributeError\u001b[0mTraceback (most recent call last)",
      "\u001b[0;32m<ipython-input-3-cb7e3ffe7cf6>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf_action\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_user_action_data\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfileList\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0mdf_action\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhead\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mAttributeError\u001b[0m: 'module' object has no attribute 'get_user_action_data'"
     ]
    }
   ],
   "source": [
    "df_action = dc.get_user_action_data(fileList[0])\n",
    "df_action.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uid</th>\n",
       "      <th>spu_id</th>\n",
       "      <th>action_type</th>\n",
       "      <th>date</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>372891</td>\n",
       "      <td>858282</td>\n",
       "      <td>1</td>\n",
       "      <td>02-18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>200</th>\n",
       "      <td>220378</td>\n",
       "      <td>1834930</td>\n",
       "      <td>1</td>\n",
       "      <td>02-21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>281</th>\n",
       "      <td>380056</td>\n",
       "      <td>1063802</td>\n",
       "      <td>1</td>\n",
       "      <td>01-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>317</th>\n",
       "      <td>463690</td>\n",
       "      <td>358967</td>\n",
       "      <td>1</td>\n",
       "      <td>03-25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393</th>\n",
       "      <td>71937</td>\n",
       "      <td>1469563</td>\n",
       "      <td>1</td>\n",
       "      <td>02-16</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        uid   spu_id  action_type   date\n",
       "98   372891   858282            1  02-18\n",
       "200  220378  1834930            1  02-21\n",
       "281  380056  1063802            1  01-03\n",
       "317  463690   358967            1  03-25\n",
       "393   71937  1469563            1  02-16"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#提取购买了的数据\n",
    "df_buy = df_action[df_action['action_type']==1]\n",
    "df_buy.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\myProgramFiles\\Anaconda2\\lib\\site-packages\\ipykernel\\__main__.py:2: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  from ipykernel import kernelapp as app\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uid</th>\n",
       "      <th>spu_id</th>\n",
       "      <th>action_type</th>\n",
       "      <th>date</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>372891</td>\n",
       "      <td>858282</td>\n",
       "      <td>1</td>\n",
       "      <td>1900-02-18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>200</th>\n",
       "      <td>220378</td>\n",
       "      <td>1834930</td>\n",
       "      <td>1</td>\n",
       "      <td>1900-02-21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>281</th>\n",
       "      <td>380056</td>\n",
       "      <td>1063802</td>\n",
       "      <td>1</td>\n",
       "      <td>1900-01-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>317</th>\n",
       "      <td>463690</td>\n",
       "      <td>358967</td>\n",
       "      <td>1</td>\n",
       "      <td>1900-03-25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>393</th>\n",
       "      <td>71937</td>\n",
       "      <td>1469563</td>\n",
       "      <td>1</td>\n",
       "      <td>1900-02-16</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        uid   spu_id  action_type       date\n",
       "98   372891   858282            1 1900-02-18\n",
       "200  220378  1834930            1 1900-02-21\n",
       "281  380056  1063802            1 1900-01-03\n",
       "317  463690   358967            1 1900-03-25\n",
       "393   71937  1469563            1 1900-02-16"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#将字符串时间转换成时间对象\n",
    "df_buy['date'] = df_buy['date'].apply(lambda x:datetime.strptime(x, '%m-%d'))\n",
    "df_buy.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 一个月每天购买情况\n",
    "1月份"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uid</th>\n",
       "      <th>spu_id</th>\n",
       "      <th>action_type</th>\n",
       "      <th>date</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>281</th>\n",
       "      <td>380056</td>\n",
       "      <td>1063802</td>\n",
       "      <td>1</td>\n",
       "      <td>1900-01-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>440</th>\n",
       "      <td>152119</td>\n",
       "      <td>1199308</td>\n",
       "      <td>1</td>\n",
       "      <td>1900-01-09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>949</th>\n",
       "      <td>24017</td>\n",
       "      <td>418363</td>\n",
       "      <td>1</td>\n",
       "      <td>1900-01-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1115</th>\n",
       "      <td>443444</td>\n",
       "      <td>1472475</td>\n",
       "      <td>1</td>\n",
       "      <td>1900-01-06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1232</th>\n",
       "      <td>403090</td>\n",
       "      <td>726334</td>\n",
       "      <td>1</td>\n",
       "      <td>1900-01-12</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         uid   spu_id  action_type       date\n",
       "281   380056  1063802            1 1900-01-03\n",
       "440   152119  1199308            1 1900-01-09\n",
       "949    24017   418363            1 1900-01-03\n",
       "1115  443444  1472475            1 1900-01-06\n",
       "1232  403090   726334            1 1900-01-12"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#提取第一个月的数据\n",
    "month1 = df_buy[(df_buy['date']>= datetime.strptime('01-01','%m-%d')) &\n",
    "                (df_buy['date']<datetime.strptime('02-01','%m-%d'))]\n",
    "month1.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\myProgramFiles\\Anaconda2\\lib\\site-packages\\ipykernel\\__main__.py:2: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  from ipykernel import kernelapp as app\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>uid</th>\n",
       "      <th>spu_id</th>\n",
       "      <th>action_type</th>\n",
       "      <th>date</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>281</th>\n",
       "      <td>380056</td>\n",
       "      <td>1063802</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>440</th>\n",
       "      <td>152119</td>\n",
       "      <td>1199308</td>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>949</th>\n",
       "      <td>24017</td>\n",
       "      <td>418363</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1115</th>\n",
       "      <td>443444</td>\n",
       "      <td>1472475</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1232</th>\n",
       "      <td>403090</td>\n",
       "      <td>726334</td>\n",
       "      <td>1</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         uid   spu_id  action_type  date\n",
       "281   380056  1063802            1     3\n",
       "440   152119  1199308            1     9\n",
       "949    24017   418363            1     3\n",
       "1115  443444  1472475            1     6\n",
       "1232  403090   726334            1    12"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 将时间列的时间数据转换为天\n",
    "month1['date'] = month1['date'].apply(lambda x: x.day)\n",
    "month1.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>user_num</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>3721</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>2524</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>2165</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>6</td>\n",
       "      <td>4903</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>7</td>\n",
       "      <td>4179</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   date  user_num\n",
       "0     3      3721\n",
       "1     4      2524\n",
       "2     5      2165\n",
       "3     6      4903\n",
       "4     7      4179"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 聚合每天有多少个用户购买商品\n",
    "day_users = month1.groupby('date')['uid'].nunique()\n",
    "day_users = day_users.to_frame().reset_index()\n",
    "day_users.columns = ['date', 'user_num']\n",
    "day_users.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>item_num</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>6170</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>4234</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>3605</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>6</td>\n",
       "      <td>8310</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>7</td>\n",
       "      <td>7638</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   date  item_num\n",
       "0     3      6170\n",
       "1     4      4234\n",
       "2     5      3605\n",
       "3     6      8310\n",
       "4     7      7638"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 聚合每天有多少种商品被购买\n",
    "day_item = month1.groupby('date')['spu_id'].nunique()\n",
    "day_item = day_item.to_frame().reset_index()\n",
    "day_item.columns = ['date', 'item_num']\n",
    "day_item.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>buy_num</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>3</td>\n",
       "      <td>7140</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "      <td>4622</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>4042</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>6</td>\n",
       "      <td>10948</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>7</td>\n",
       "      <td>9414</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   date  buy_num\n",
       "0     3     7140\n",
       "1     4     4622\n",
       "2     5     4042\n",
       "3     6    10948\n",
       "4     7     9414"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#聚合每天有多少购买记录\n",
    "day_ui = month1.groupby('date').size()\n",
    "day_ui = day_ui.to_frame().reset_index()\n",
    "day_ui.columns = ['date', 'buy_num']\n",
    "day_ui.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x36a0a630>"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAI4CAYAAAB3HEhGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3X+4XVV9J/73BwIF5IeiSAlggQEcNFipER0rgqAz1Kai\nM8qXVlFbJTpqK7a1lTpPbW0Z7VTRTqfj9A5aUVRKW6dltLYqNur8EJtQFJFacUw0uaApBVEU5Mf6\n/nF27DW5ubkk69yTm/t6Pc957j7r7LPX2udm5Z73WWuvU621AAAAsOv2mnQDAAAA9hQCFgAAQCcC\nFgAAQCcCFgAAQCcCFgAAQCcCFgAAQCcCFgDMoarWVNVLJt2OnVFV/7Kq7p3j8TdV1aUL2SaAPZ2A\nBbAELebQsEVVtaq6s6q+XVWbquqSqtp70u3qqaoeMZzfltvMc/52VZ026TYC8IOWTboBAFBVy1pr\n2x1pmcOPttZuqqp/mWRNkn9I8t8WqO6xa619NcmBW+5XVctwzpNrFQBzMYIFsIRV1UOq6oNVtbmq\nbhu2j5rx+Jqq+q2q+t9V9a2q+khVPWx47Iyq2rjV8dZX1dOG7VOr6v9W1e1VdXNV/Zeq2nfGvq2q\nXlFVX0rypar6g6p6y1bHu6qqXr2j82it/X2STyVZMePYx884zruq6rdntruqfrWqbknyR0P5OVV1\nXVXdUVVfrqqzZ1TxI7O9BsPz/qSqbqmqb1bVJ6vq0TMee0ZVfWF43qaq+uUZj60a6ru9qv5PVT1m\nR+c5m6p6dlV9dmj3V6vq12bZ52XD72C6qn5+jmOdVlXXDG26tqp+fGfaBLCUCVgAS9teGQWMH0ny\niCTfTfJfttrnZ5L8bJKHJ9k3yS9nfu5L8uokD0vyr5KcleTlW+3zrCRPSPKoJJcl+emq2itJhhDz\ntCTv21FFVfWoJKcl+bt5tu2Hkxya0XmvrqpTk7w7yWuSPDjJU5Ksn7H/XK/Bh5OcMDx2bZL3znjs\nHUle2lo7KKPw9/GhvackeWeSlyZ5aJI/THJVVf3QPNs/0x1D+x6c0ev5y1uFw70zev2PS/KTSX6z\nqp689UGq6pgkf57kdRm9Nv8hyZ9X1UN2ok0AS5aABbCEtdZuba39WWvtO621byW5OMnpW+32R621\nf2itfTfJlUkeO89jr2utfbq1dm9rbX1GIWLrY7+xtfZPrbXvttY+k+SbGQWxJDkvyZrW2tfnqOba\nqrotyf9McmmG0ah5uD/J61trdw/n9eIk72ytfbS1dn9rbdMwKrbFdl+D1to7W2vfaq3dneQ3kvxo\nVR0yPHxPkkdV1cGttdtaa9cO5auT/GFr7ZrW2n2ttcuS3J3kifNs//e11q5urd0wtPvaoX1bv86v\nH17jv0tyeZKfnuVQL0zygdbax4Zj/WWSLyT51w+0TQBLmYAFsIRV1QFV9YdVtaGq7kjyySQP3mqx\niFtmbH8nM64J2sGxTxymHN4yHPs/ZjSaNdPXtrp/WZLnD9vPT/KeHVTzY621h7TW/kVr7T+01u6f\nT9uSbG6t3TXj/tFJvjzH/rO+BlW197AS35eHc1w/7LPlPP9dkmck2VBVn6iqfzWU/0iSXxqm4t1e\nVbcPbVg+z/Z/X1X9+HDszVX1zSQvytyv84bt1PMjSZ6/VZtW7kybAJYyAQtgafulJI9M8oTW2sEZ\nTY1LkprHc+9McsCWO0MoO2zG429P8vdJThiO/WuzHLdtdf/yJOdU1Y8mOSmjKWs74zsz25bRlMC5\n6v1akn+xE/X8TJJzMprKeEiSY4bySpLW2t+21s7JaPrgn2c0urSlvotbaw+ecTugtfb+nWjDlUn+\nOMnRrbVDkrwr277OR8/YfkSS6VmO87Ukl27Vpge11t66E20CWLIELICl7aCMrru6vaoOTfL6B/Dc\nf0iyX1X9ZFXtk9E1OzOvITooo+uDvj2s8vfvd3TA1trGJH+b0cjVnw1T8nbGdUl+ZhhhOjvbTpnb\n2juS/GxVnVVVe1XVkUObd+SgjKb23ZpRoPuPWx6oqn2r6nlVdUhr7Z6MXostI2z/PcnLquoJNfKg\n4XU86IGcZFVVRqNpt7bW7qqqJyV57iy7vr6q9h+C6/kZBbKtXZbkucNrsPew/1lVtXU4BWAOAhbA\n0tWSvC3J/kn+Mcmnk/zVvJ/c2jczWrTi0iSbMhrRmrmq4C9nNMLzrYwCxWxv6mdzWZKTs+PpgXN5\nVZKfSnJ7kudlByNhw/VfP5vkrRldB/aJjKbM7ci7M5pytymj65U+vdXj5ydZP0wffNnQlrTW1ia5\nIKMFRW5LclNGU/sekNZaG4775qr6VpJfSfInW+12X5Jrknwlo9/vG1prn5zlWP8voymNv5nRv4cN\nGb2O3isAPAA1+r8ZgKWkqq7N6I32zk7BG5uqekpGUwV/pPkjBcAi41MpgCVm+J6mkzL/Jc0XzDDV\n8FUZXQskXAGw6AhYAEtIVf1Oko8k+dXW2oZJt2emqjopoyl9R2Q0dREAFh1TBAEAADoxggUAANDJ\nskk3YKE97GEPa8ccc8ykmwEAACwi69at+8fW2mE72m/JBaxjjjkma9eunXQzAACARaSq5nXtsimC\nAAAAnQhYAAAAnQhYAAAAnSy5a7AAAGApueeee7Jx48bcddddk27KorHffvvlqKOOyj777POAnytg\nAQDAHmzjxo056KCDcswxx6SqJt2c3V5rLbfeems2btyYY4899gE/3xRBAADYg91111156EMfKlzN\nU1XloQ996E6P+AlYAACwhxOuHphdeb1MEQQAgCVkanq6y3FWL1/e5Th7GiNYAADAbuu+++6bdBMe\nEAELAADobs2aNXnJS17y/fvHH398rrjiipx66ql56lOfmosuuihJ8olPfCKnn356zjjjjLzsZS9L\nay3r16/P4x//+Jx//vm54IILJnUKO8UUQQAAYEG8733vy+WXX54TTzwx999/f1prufDCC7NmzZoc\ncsghefWrX50PfehDWbFiRdavX5+rr746Bx988KSb/YAIWAAAQHezLRTxxje+MW9+85tz55135txz\nz82TnvSkrF+/Puecc06S5Nvf/nYe+chHZsWKFVmxYsWiC1eJgAUAAIzBoYcemo0bNyZJrrvuutx7\n77059thjMzU1lbvvvjsnnHBCNmzYkOOOOy4f/OAHc+CBByYZfTHypk2bsvfee0+y+TtNwAIAALo7\n+eSTc/DBB+f000/PaaedlmXLluU1r3lNrr/++txzzz156UtfmqrKJZdckmc+85lprWWvvfbKW9/6\n1kU5crVFtdYm3YYFtXLlyrZ27dpJNwMAABbEjTfemJNOOmnSzVh0tn7dqmpda23ljp5nFUEAAIBO\nBCwAAIBOBCwAAIBOBCwAAIBOBCwAAIBOBCwAAIBOfA8WAAAsIVPrprocZ/XjVs/5+C233JLf/d3f\nzU/91E/l0EMPzWMe85gu9e7ujGABAADd/fAP/3De8pa3ZM2aNfnc5z436eYsGAGLPc701PQ2NwAA\nFtb69etz5pln5l3velcuvvjinHHGGbnvvvvyJ3/yJznttNPy5Cc/OW94wxuSJGvWrMmZZ56Zc889\nNyeddFKuuOKKPPe5z83JJ5+c97znPRM+kwfGFEEAAGAs9tprr7zoRS/K8ccfn+c///m57bbb8pa3\nvCWf+tSnss8+++TZz352rr/++iTJt771rXzsYx/LZz7zmTz72c/Ol7/85dx1110566yzcv7550/4\nTOZPwAIAABbETTfdlA0bNuTpT396kuT222/Phg0bcuCBB+Yxj3lM9tprrxx11FE58cQTc8ABB+SA\nAw7Id7/73Qm3+oERsAAAgLHZd999c++99yZJjjvuuBx//PH52Mc+lmXLluX+++9Pay2f+tSnUlXf\nf87M7cVGwAIAgCVkR6v/9fb0pz89F154YT74wQ/myiuvzIUXXpgzzzwze++9d/bZZ5+8+93vXtD2\njFu11ibdhgW1cuXKtnbt2kk3gzGabVGL5auXT6AlAACTd+ONN+akk06adDMWna1ft6pa11pbuaPn\nWUUQAACgEwELAACgEwELAACgEwELAACgEwELAACgE8u0AwDAEjLbiss7wyrNszOCBQAALDrPe97z\nkiTr16/PVVddNeHW/DMBCwAA2G3dd999s5a/973vTSJgAQAAS8CaNWvykpe85Pv3jz/++FxxxRU5\n9dRT89SnPjUXXXRRkuQTn/hETj/99Jxxxhl52cteltZa1q9fn8c//vE5//zzc8EFF8x6/OOPPz5J\ncskll+RDH/pQzjjjjKxbty7XX399nva0p+XMM8/Mueeem+9+97tJkkc84hFZvXp1TjnllLzxjW/M\nhRdemCc84Ql5xSte0fW8XYMFAAAsiPe97325/PLLc+KJJ+b+++9Pay0XXnhh1qxZk0MOOSSvfvWr\n86EPfSgrVqzI+vXrc/XVV+fggw+e85i/+Iu/mMsvvzyXXnppkuQpT3lKLr/88jziEY/I7/3e7+Ud\n73hHXvnKV2bz5s357d/+7RxyyCE5/PDD8/GPfzxve9vbcsopp+Sf/umfcuihh3Y5RwELAADorqq2\nKXvjG9+YN7/5zbnzzjtz7rnn5klPelLWr1+fc845J0ny7W9/O4985COzYsWKrFixYofhajY33HBD\nXvCCFyRJ7rrrrjztaU9LkixfvjwPf/jDkyQPe9jDcsoppyRJjjzyyNx2220CFgAAsPs69NBDs3Hj\nxiTJddddl3vvvTfHHntspqamcvfdd+eEE07Ihg0bctxxx+WDH/xgDjzwwCTJPffck02bNmXvvfee\nVz377rtv7r333u/fX7FiRd7//vfniCOOSJJ873vfS7Jt4Jt5v7W28ye6FQELAACWkIVaXv3kk0/O\nwQcfnNNPPz2nnXZali1blte85jW5/vrrc8899+SlL31pqiqXXHJJnvnMZ6a1lr322itvfetbH9DI\n1cknn5wvf/nLec5znpPXv/71+YM/+IO86EUvyj333JMkueiii/L0pz99XKe5jeqZ1haDlStXtrVr\n1066GYzRbN/t4HsaAICl6sYbb8xJJ5006WYsOlu/blW1rrW2ckfPM4IFAADstj7+8Y/nDW94ww+U\n/fqv/3rOPPPMCbVobgIWAADs4Vprsy46sRiceeaZCx6mdmWWn+/BAgCAPdh+++2XW2+9tetCDnuy\n1lpuvfXW7Lfffjv1fCNYAMAuce0r7N6OOuqobNy4MZs3b550UxaN/fbbL0cdddROPVfAAgCAPdg+\n++yTY489dtLNWDJMEQQAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIA\nAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhkbAGrqt5ZVd+oqs/PKDu0qj5aVV8afj5k\nxmMXVdVNVfXFqvo3M8ofV1XXD4/956qqofyHquqPh/JrquqYcZ0LAADAfIxzBOtdSc7equy1Sa5u\nrZ2Q5OrhfqrqUUnOS/Lo4Tn/tar2Hp7z9iQXJDlhuG055ouT3NZaOz7JW5P8ztjOBAAAYB7GFrBa\na59M8k9bFZ+T5LJh+7Ikz5pRfkVr7e7W2leS3JTk1Ko6IsnBrbVPt9Zakndv9Zwtx/rTJGdtGd0C\nAACYhIW+Buvw1trNw/YtSQ4fto9M8rUZ+20cyo4ctrcu/4HntNbuTfLNJA+drdKqWl1Va6tq7ebN\nm3ucBwAAwDYmtsjFMCLVFqiuqdbaytbaysMOO2whqgQAAJaghQ5YXx+m/WX4+Y2hfFOSo2fsd9RQ\ntmnY3rr8B55TVcuSHJLk1rG1HAAAYAcWOmBdleSFw/YLk/zFjPLzhpUBj81oMYvPDNMJ76iqJw7X\nV71gq+dsOdZzknx8GBUDAACYiGXjOnBVvT/JGUkeVlUbk7w+yZuSXFlVL06yIcm5SdJau6Gqrkzy\nhST3JnlFa+2+4VAvz2hFwv2TfHi4Jck7krynqm7KaDGN88Z1LgAAAPMxtoDVWvvp7Tx01nb2vzjJ\nxbOUr02yYpbyu5I8d1faCAAA0NPEFrkAAADY0whYAAAAnQhYAAAAnQhYAAAAnQhYAAAAnQhYAAAA\nnQhYAAAAnQhYAAAAnQhYAAAAnQhYAAAAnQhYAAAAnQhYAAAAnQhYAAAAnQhYAAAAnQhYAAAAnQhY\nAAAAnQhYAAAAnQhYAAAAnQhYAAAAnQhYAAAAnSybdANgMZqemt6mbPnq5RNoCQAAuxMjWAAAAJ0I\nWAAAAJ0IWAAAAJ0IWAAAAJ0IWAAAAJ0IWAAAAJ0IWAAAAJ0IWAAAAJ0IWAAAAJ0IWAAAAJ0IWAAA\nAJ0IWAAAAJ0IWAAAAJ0sm3QDgNlNT01vU7Z89fIJtAQAgPkyggUAANCJgAUAANCJgAUAANCJgAUA\nANCJgAUAANCJgAUAANCJgAUAANCJgAUAANCJgAUAANCJgAUAANCJgAUAANCJgAUAANCJgAUAANCJ\ngAUAANCJgAUAANDJskk3AIA9y/TU9DZly1cvn0BLAGDhGcECAADoRMACAADoRMACAADoRMACAADo\nRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMAC\nAADoRMACAADoRMACAADoZNmkGwDAwpmemt6mbPnq5RNoCQDsmYxgAQAAdGIEi0Vtat3UNmWrsmoC\nLQEAACNYAAAA3QhYAAAAnQhYAAAAnQhYAAAAnQhYAAAAnQhYAAAAnQhYAAAAnQhYAAAAnQhYAAAA\nnUwkYFXVq6vqhqr6fFW9v6r2q6pDq+qjVfWl4edDZux/UVXdVFVfrKp/M6P8cVV1/fDYf66qmsT5\nAAAAJBMIWFV1ZJJfSLKytbYiyd5Jzkvy2iRXt9ZOSHL1cD9V9ajh8UcnOTvJf62qvYfDvT3JBUlO\nGG5nL+CpAAAA/IBJTRFclmT/qlqW5IAk00nOSXLZ8PhlSZ41bJ+T5IrW2t2tta8kuSnJqVV1RJKD\nW2ufbq21JO+e8RwAAIAFt+ABq7W2Kcmbk3w1yc1Jvtla+0iSw1trNw+73ZLk8GH7yCRfm3GIjUPZ\nkcP21uUAAAATMYkpgg/JaFTq2CTLkzyoqp4/c59hRKp1rHN1Va2tqrWbN2/udVgAAIAfMIkpgk9L\n8pXW2ubW2j1JPpDkSUm+Pkz7y/DzG8P+m5IcPeP5Rw1lm4btrcu30Vqbaq2tbK2tPOyww7qeDAAA\nwBbLJlDnV5M8saoOSPLdJGclWZvkziQvTPKm4edfDPtfleR9VXVJRiNeJyT5TGvtvqq6o6qemOSa\n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\n+PmQGc+5qKpuqqovVtW/mVH+uKq6fnjsP1dVLfT5AAAAbDGJEax7k/xSa+1RSZ6Y5BVV9agkr01y\ndWvthCRXD/czPHZekkcnOTvJf62qvYdjvT3JBUlOGG5nL+SJAAAAzLTgAau1dnNr7dph+1tJbkxy\nZJJzklw27HZZkmcN2+ckuaK1dndr7StJbkpyalUdkeTg1tqnW2stybtnPAcAAGDBTXSZ9qo6Jskp\nSa5Jcnhr7ebhoVuSHD5sH5nk0zOetnEou2fY3rocAIBFbHpq269/Wb56+U4fb2rd1DZlq7Jqp48H\nc5nYIhdVdWCSP0tyYWvtjpmPDSNSrWNdq6tqbVWt3bx5c6/DAgAA/ICJBKyq2iejcPXe1toHhuKv\nD9P+Mvz8xlC+KcnRM55+1FC2adjeunwbrbWp1trK1trKww47rN+JAAAAzLDgUwSHlf7ekeTG1tol\nMx66KskLk7xp+PkXM8rfV1WXJFme0WIWn2mt3VdVd1TVEzOaYviCJL+/QKcBAPB9U9PbTmkDlqZJ\nXIP140nOT3J9VV03lP1aRsHqyqp6cZINSc5NktbaDVV1ZZIvZLQC4Staa/cNz3t5kncl2T/Jh4cb\nAADARCx4wGqt/a8k2/u+qrO285yLk1w8S/naJCv6tQ4AgIVkAQr2NBNb5AIAAGBPI2ABAAB0ImAB\nAAB0ImABAAB0MolVBAEAYNGyLD9zMYIFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQ\niYAFAADQiYAFAADQiYAFAADQybJJNwAAgLlNTU9PugnAPBnBAgAA6ETAAgAA6ETAAgAA6ETAAgAA\n6ETAAgAA6ETAAgAA6ETAAgAA6ETAAgAA6ETAAgAA6ETAAgAA6ETAAgAA6ETAAgAA6ETAAgAA6GTZ\npBsAAMDkTU1PT7oJsEcwggUAANCJgAUAANCJgAUAANCJa7AAANhjuJaMSTOCBQAA0ImABQAA0ImA\nBQAA0ImABQAA0ImABQAA0ImABQAA0Ill2gEAWBCWUGcpMIIFAADQiYAFAADQiYAFAADQiYAFAADQ\niYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAF\nAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQ\niYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAF\nAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQyaIPWFV1dlV9sapu\nqqrXTro9AADA0rWoA1ZV7Z3kD5L8RJJHJfnpqnrUZFsFAAAsVYs6YCU5NclNrbX/11r7XpIrkpwz\n4TYBAABLVLXWJt2GnVZVz0lydmvtJcP985M8obX2yq32W51k9XD3kUm+uKAN7eNhSf5RHepQxx5d\nx0LYU14rdahjMdaxJ5yDOtSxmOvYVT/SWjtsRzstW4iWTFprbSrJ1KTbsSuqam1rbaU61KGOPbeO\nhbCnvFbqUMdirGNPOAd1qGMx17FQFvsUwU1Jjp5x/6ihDAAAYMEt9oD1t0lOqKpjq2rfJOcluWrC\nbQIAAJaoRT1FsLV2b1W9MslfJ9k7yTtbazdMuFnjshBTHNWhDnVMto6FsKe8VupQx2KsY084B3Wo\nYzHXsSAW9SIXAAAAu5PFPkUQAABgtyFgAQAAdCJg7caqar+q+kxVfbaqbqiq3xxjXXtX1d9V1QfH\ndPz1VXV9VV1XVWvHVMeDq+pPq+rvq+rGqvpXnY//yKH9W253VNWFPesY6nn18Pv+fFW9v6r2G0Md\nrxqOf0Ovc6iqd1bVN6rq8zPKDq2qj1bVl4afDxlDHc8dzuP+qtrl5V23U8fvDv+uPldV/6OqHryr\n9YzbbOcx47FfqqpWVQ/rXUdV/UZVbZrRT57Ru46h/OeH38kNVfWfetdRVX884xzWV9V1Y6jjsVX1\n6S3/L1bVqWOo40er6v8O///+z6o6eBfrOLqq/qaqvjC89q8ayrv19Tnq6NbX56ijW1+fo47fGo5/\nXVV9pKqW965jxuO73NfnOI9ufX2u8+jV1+c4j259fY46uvX1Oero1tdrO+8/O/fz7dXR9W/6xLTW\n3HbTW5JKcuCwvU+Sa5I8cUx1/WKS9yX54JiOvz7Jw8b8el2W5CXD9r5JHjzGuvZOcktGXzjX87hH\nJvlKkv2H+1cmeVHnOlYk+XySAzJa6OZjSY7vcNynJPmxJJ+fUfafkrx22H5tkt8ZQx0nZfQF4muS\nrBzTefzrJMuG7d/Z1fNYiNts5zGUH53RwkAbdrVPbue1+o0kvzzO80jy1OHf7Q8N9x8+jtdqxuNv\n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\nAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x368487b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制条形图\n",
    "bar_width = 0.2\n",
    "opacity = 0.4 #透明度\n",
    "plt.figure(figsize=(12,8)) #图片大小\n",
    "\n",
    "plt.bar(day_users['date'], day_users['user_num'], \n",
    "        bar_width, alpha=opacity, color='c', label='user')\n",
    "plt.bar(day_item['date']+bar_width, day_item['item_num'], \n",
    "        bar_width, alpha=opacity, color='g', label='item')\n",
    "plt.bar(day_ui['date']+bar_width*2, day_ui['buy_num'], \n",
    "        bar_width, alpha=opacity, color='m', label='user_item')\n",
    "plt.xlabel('day')\n",
    "plt.ylabel('number')\n",
    "plt.title('January Purchase Table')\n",
    "day_range = day_users['date'].values #天数\n",
    "plt.xticks(day_users['date'] + bar_width * 3 / 2., day_range)\n",
    "# plt.ylim(0, 80)\n",
    "plt.tight_layout() \n",
    "plt.legend(prop={'size':9})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\myProgramFiles\\Anaconda2\\lib\\site-packages\\ipykernel\\__main__.py:5: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x80a16978>"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAI4CAYAAAB3HEhGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3X+YZFV9J/73hxkQkB+KIGEYFAjggoOROBLXiCDohhgU\n3Y0siSImCho1iknMStxvNG5YzcZfyXcTd2fRgKISkrhKUBMVgzG7q2YGcRGJEeOMzAzoBFEUBRk4\n+0fdiW3TM9Pgqarp6dfreerpW7du3c+51d23693n3FPVWgsAAAA/ul2m3QAAAICdhYAFAADQiYAF\nAADQiYAFAADQiYAFAADQiYAFAADQiYAFwFZV1VVV9YJpt2NHs5Bfl6r6V1W1eRuPv6GqLpxkmwB2\nJgIWwCJQVWur6ntV9Z0Zt2XTbldvVdWq6vbh+DZU1Zurasm029VTVT1s1vdx5jF/p6pOmHYbARaz\npdNuAAAT87TW2sfGtfOqWtpa22rPyAT39xOttRuq6l8luSrJPyb5bxOqPXatta8m2WvL/apqGY55\neq0CYAs9WACLXFU9rqr+d1V9s6o+V1Unzdrkx6vqM1V1W1V9oKr2G5536NB78vyq+mqSj1fVSVW1\nftb+11bVk4fl46vq/wy1bqqq/1pVu83YtlXVS6rqS0m+VFV/VFVvmrW/y6vqFds7rtbaPyT5ZJIV\nM/Z9xIz9XFRVvzssn1RV66vqP1TVzUn+ZFh/elVdMxz7l6vq1BklHl5V/6uqvl1VH6mq/Wfs+8+q\n6uaq+lZV/W1VPXLGY0+tqi8Mz9tQVb8x47HThnrfHL4nj9recc6lqp45fC9vq6qvVtVvzbHNi4bv\nwcaq+tVt7OuEqvr00Karq+qn70+bABYLAQtgEauqg5N8MMnvJtkvyW8k+YuqOmDGZs9N8stJDkqy\nOckfztrNiUmOTvIz8yh5d5JXJNk/yb9OckqSF8/a5hlJfirJMUkuTvILVbXL0N79kzw5yXvmcWzH\nJDkhyWfn0a4k+bGMXoOHJzm3qo5P8s4kr0zyoCRPTLJ2xva/mOSXkjw0yW4ZvXZbfDjJkcNjVyd5\n94zH3p7kha21vTMKfx8f2ntcknckeWGShyT570kur6oHzLP9M902tO9BGb2evzErHC7J6PU/PMnP\nJfmdqnrC7J1U1aFJ3p/k1Rm9Nv8xyfur6sH3o00Ai4KABbB4vH/ohfhmVb1/WPecJB9qrX2otXZP\na+2jSVYneeqM572rtfb51trtSf6/JGfMuq7pta2121tr39teA1pra1prn2qtbW6trc0oRJw4a7PX\nt9a+0Vr7XmvtM0m+lVEQS5Izk1zVWvvaNspcXVW3JvnLJBdm6I2ah3uSvKa1dudwLM9P8o7W2keH\n12bD0Cu2xZ+01v5x2PayJI+ecZzvaK19u7V2Z5LXJvmJqtp3ePiuJMdU1T6ttVtba1cP689N8t9b\na59urd3dWrs4yZ1JHjfP9v+L1tqVrbXrhnZfPbRv9uv8muE1/mySS5L8why7OjvJ+1prHxv29aEk\nX0jyb+5rmwAWCwELYPF4RmvtQcPtGcO6hyd51ozg9c0kT8iot2qLG2csr0uya0Y9UHM9vk1VdVRV\nXTEMn7styX+eta+59ndxRkEww9d3bafMT7bWHtxa+/HW2n9srd0zz+Ztaq3dMeP+IUm+vI3tb56x\n/N0M10VV1ZIazcT35eEY1w7bbDnOf5dRgF1XVZ+oqn89rH94kl+f9b04JMl9noykqn562PemqvpW\nkudl26/zuq3UeXiS58xq08r70yaAxULAAljcbsyoh+pBM24PbK29YcY2h8xYflhGPTD/PGNdm7F8\ne5I9t9wZerpmDjd8W5J/SHJka22fJL+VpGa1qc26f0mS06vqJzIaivj+3D/fndm2jIYEbqvujUl+\n/H7U+cUkp2c0lHHfJIcO6ytJWmt/31o7PaPhg+/PqHdpS70LZn0v9mytvfd+tOGyJH+a5JDW2r5J\nLsq9X+fZ39eNc+znxiQXzvHz8Zb70SaARUHAAljcLknytKr6maHnZfdhwoflM7Z5TlUdU1V7Jnld\nkj9vrd29lf39Y5Ldq+rnqmrXjK7ZmXkN0d4ZXR/0nRrN8vcr22tga219kr/PqOfqL+YzFHErrkny\ni8Nxnpp7D5mb7e1JfqmqTqmqXarq4KHN27N3RkP7bsko0P3nLQ9U1W5V9eyq2re1dldGr8WWHrb/\nkeRFVfVTNfLA4XXc+74cZFVVRr1pt7TW7qiqxyd51hybvqaq9hiC61kZBbLZLs6oh/OU4XXbY1ie\nHU4BGAhYAItYa+3GjHpbfivJpox6LF6ZH/778K6MekBuTrJ7kpdtY3/fymjSiguTbMioR2vmrIK/\nkVEPz7czChRzvamfy8VJjs32hwduy8uTPC3JN5M8O9vpCRuu//qlJG/J6DqwT2Q0ZG573pnRkLsN\nGV2v9KlZj5+VZO0wfPBFQ1vSWlud5Jwk/zXJrUluyGho333SWmvDft9YVd9O8ptJ/mzWZncn+XSS\nryT5qySva6397Rz7+qeMhjT+Tka9lusyeh29fwDYihqdhwFgx1VVT8yot+3hzR8uAHZg/gMFwA5t\nGGr48oyuBRKuANihCVgA7LCq6uiMhvQdlOStU24OAGyXIYIAAACd6MECAADoZOm0GzBp+++/fzv0\n0EOn3QwAAGABWbNmzT+31g7Y3naLLmAdeuihWb169bSbAQAALCBVtW4+2xkiCAAA0ImABQAA0ImA\nBQAA0MmiuwYLAAAWk7vuuivr16/PHXfcMe2mLBi77757li9fnl133fU+P1fAAgCAndj69euz9957\n59BDD01VTbs5O7zWWm655ZasX78+hx122H1+viGCAACwE7vjjjvykIc8RLiap6rKQx7ykPvd4ydg\nAQDATk64um9+lNfLEEEAAFhEVm3c2GU/5y5b1mU/Oxs9WAAAwA7r7rvvnnYT7hMBCwAA6O6qq67K\nC17wgn+5f8QRR+TSSy/N8ccfnyc96Uk5//zzkySf+MQncuKJJ+akk07Ki170orTWsnbt2jz2sY/N\nWWedlXPOOWdah3C/GCIIAABMxHve855ccsklOeqoo3LPPfektZbzzjsvV111Vfbdd9+84hWvyAc/\n+MGsWLEia9euzZVXXpl99tln2s2+TwQsAACgu7kminj961+fN77xjbn99ttzxhln5PGPf3zWrl2b\n008/PUnyne98J494xCOyYsWKrFixYsGFq0TAAgAAxmC//fbL+vXrkyTXXHNNNm/enMMOOyyrVq3K\nnXfemSOPPDLr1q3L4YcfniuuuCJ77bVXktEHI2/YsCFLliyZZvPvNwELAADo7thjj80+++yTE088\nMSeccEKWLl2aV77ylbn22mtz11135YUvfGGqKm9+85vz9Kc/Pa217LLLLnnLW96yIHuutqjW2nh2\nXPWOJKcl+XprbcWwbr8kf5rk0CRrk5zRWrt1eOz8JM9PcneSl7XW/npY/5gkFyXZI8mHkry8tdaq\n6gFJ3pnkMUluSfLvW2trt9eulStXttWrV3c7TgAA2JFdf/31Ofroo6fdjAVn9utWVWtaayu397xx\nziJ4UZJTZ617VZIrW2tHJrlyuJ+qOibJmUkeOTznj6tqS5/g25Kck+TI4bZln89Pcmtr7Ygkb0ny\ne2M7EgAAgHkYW8Bqrf1tkm/MWn16kouH5YuTPGPG+ktba3e21r6S5IYkx1fVQUn2aa19qo262t45\n6zlb9vXnSU4pH1ENAABM0aQ/B+vA1tpNw/LNSQ4clg9OcuOM7dYP6w4elmev/6HntNY2J/lWkofM\nVbSqzq2q1VW1etOmTT2OAwAA4F6m9kHDQ4/UeC4Au3etVa21la21lQcccMAkSgIAAIvQpAPW14Zh\nfxm+fn1YvyHJITO2Wz6s2zAsz17/Q8+pqqVJ9s1osgsAAICpmHTAujzJ2cPy2Uk+MGP9mVX1gKo6\nLKPJLD4zDCe8raoeN1xf9dxZz9myr59P8vE2rikRAQAA5mFsn4NVVe9NclKS/atqfZLXJHlDksuq\n6vlJ1iU5I0laa9dV1WVJvpBkc5KXtNbuHnb14vxgmvYPD7ckeXuSd1XVDRlNpnHmuI4FAAB2FqvW\nrOqyn3Mfc+42H7/55pvz+7//+3na056W/fbbL4961KO61N3RjS1gtdZ+YSsPnbKV7S9IcsEc61cn\nWTHH+juSPOtHaSMAADAeP/ZjP5Y3velNee1rX5sjjjhi0QSsqU1yAQA7o42rNt7rBrAYrV27Nief\nfHIuuuiiXHDBBTnppJNy991358/+7M9ywgkn5AlPeEJe97rXJUmuuuqqnHzyyTnjjDNy9NFH59JL\nL82znvWsHHvssXnXu9415SO5b8bWgwUAACxuu+yyS573vOfliCOOyHOe85zceuutedOb3pRPfvKT\n2XXXXfPMZz4z1157bZLk29/+dj72sY/lM5/5TJ75zGfmy1/+cu64446ccsopOeuss6Z8JPMnYAEA\nABNxww03ZN26dXnKU56SJPnmN7+ZdevWZa+99sqjHvWo7LLLLlm+fHmOOuqo7Lnnntlzzz3zve99\nb8qtvm8ELAAAYGx22223bN68OUly+OGH54gjjsjHPvaxLF26NPfcc09aa/nkJz+Z0aThIzOXFxoB\nCwAAFpHtzf7X21Oe8pScd955ueKKK3LZZZflvPPOy8knn5wlS5Zk1113zTvf+c6JtmfcarF9dNTK\nlSvb6tWrp90MAHZSc01qsezcZVNoCcDI9ddfn6OPPnrazVhwZr9uVbWmtbZye88ziyAAAEAnAhYA\nAEAnAhYAAEAnAhYAAEAnAhYAAEAnpmkHAIBFZK7ZTu8PM6TOTQ8WAACw4Dz72c9OkqxduzaXX375\nlFvzAwIWAACww7r77rvnXP/ud787iYAFAAAsAldddVVe8IIX/Mv9I444IpdeemmOP/74POlJT8r5\n55+fJPnEJz6RE088MSeddFJe9KIXpbWWtWvX5rGPfWzOOuusnHPOOXPu/4gjjkiSvPnNb84HP/jB\nnHTSSVmzZk2uvfbaPPnJT87JJ5+cM844I9/73veSJA972MNy7rnn5rjjjsvrX//6nHfeefmpn/qp\nvOQlL+l63K7BAgAAJuI973lPLrnkkhx11FG555570lrLeeedl6uuuir77rtvXvGKV+SDH/xgVqxY\nkbVr1+bKK6/MPvvss819/tqv/VouueSSXHjhhUmSJz7xibnkkkvysIc9LH/wB3+Qt7/97XnpS1+a\nTZs25Xd/93ez77775sADD8zHP/7xvPWtb81xxx2Xb3zjG9lvv/26HKOABQAAdFdV91r3+te/Pm98\n4xtz++2354wzzsjjH//4rF27NqeffnqS5Dvf+U4e8YhHZMWKFVmxYsV2w9Vcrrvuujz3uc9Nktxx\nxx158pOfnCRZtmxZHvrQhyZJ9t9//xx33HFJkoMPPji33nqrgAUAAOy49ttvv6xfvz5Jcs0112Tz\n5s057LDDsmrVqtx555058sgjs27duhx++OG54oorstdeeyVJ7rrrrmzYsCFLliyZV53ddtstmzdv\n/pf7K1asyHvf+94cdNBBSZLvf//7Se4d+Gbeb63d/wOdRcACAIBFZFLTqx977LHZZ599cuKJJ+aE\nE07I0qVL88pXvjLXXntt7rrrrrzwhS9MVeXNb35znv70p6e1ll122SVvectb7lPP1bHHHpsvf/nL\n+fmf//m85jWvyR/90R/lec97Xu66664kyfnnn5+nPOUp4zrMe6meaW0hWLlyZVu9evW0mwHATmqu\nz5fxWTHANF1//fU5+uijp92MBWf261ZVa1prK7f3PD1YAADADuvjH/94Xve61/3Qut/+7d/OySef\nPKUWbZuABQAAO7nW2pyTTiwEJ5988sTD1I8yys/nYAEAwE5s9913zy233NJ1IoedWWstt9xyS3bf\nfff79Xw9WAAAsBNbvnx51q9fn02bNk27KQvG7rvvnuXLl9+v5wpYAACwE9t1111z2GGHTbsZi4Yh\nggAAAJ0IWAAAAJ0IWAAAAJ0IWAAAAJ0IWAAAAJ0IWAAAAJ0IWAAAAJ0IWAAAAJ0IWAAAAJ0IWAAA\n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\narbWViVZlSQrV67stl8AgJkM2QOmcQ3WTyd5elU9NcnuSfapqkuSfK2qDmqt3TQM//v6sP2GJIfM\neP7yYd1TEREhAAAShklEQVSGYXn2egAAgKmY+BDB1tr5rbXlrbVDM5q84uOtteckuTzJ2cNmZyf5\nwLB8eZIzq+oBVXVYkiOTfGYYTnhbVT1umD3wuTOeAwAAMHHTnEVwtjckuayqnp9kXZIzkqS1dl1V\nXZbkC0k2J3nJMINgkrw4yUVJ9sho9kAzCAKw4BlmBrBwTTVgtdauSnLVsHxLklO2st0FSS6YY/3q\nJCvG10IAAID5m9oHDQMAAOxsBCwAAIBOBCwAAIBOBCwAAIBOdqRZBAGACTNjIUBferAAAAA6EbAA\nAAA6EbAAAAA6EbAAAAA6EbAAAAA6EbAAAAA6EbAAAAA6EbAAAAA6EbAAAAA6EbAAAAA6WTrtBgAA\nwGK0auPGaTeBMRCwAACYF4EAtk/AApgAb0oAYHEQsAAAgO4W6z8XTXIBAADQiYAFAADQiYAFAADQ\niYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQiYAFAADQydJpNwDYMS3WT18HAPhRCFiLjDfN\nAAAwPoYIAgAAdKIHCxYIvY8A951zJzBpAhYAMDECD7CzM0QQAACgEwELAACgE0MEAQDYIRlSykIk\nYAEAwCIgsE6GIYIAAACd6MEC2An5LyXAfefcSQ96sAAAADoRsAAAADoRsAAAADpxDRawQzDuHQDY\nGQhYU7azv6nc2Y8PAABmMkQQAACgEwELAACgE0ME4X4y/BEAgNkELAB+ZP7hAAAjhggCAAB0ImAB\nAAB0ImABAAB0ImABAAB0ImABAAB0ImABAAB0ImABAAB0ImABAAB0ImABAAB0ImABAAB0ImABAAB0\nsnTaDQCYhlUbN067CQDATkgPFgAAQCcCFgAAQCcCFgAAQCcCFgAAQCcmuWCnYuICAACmSQ8WAABA\nJwIWAABAJwIWAABAJwIWAABAJwIWAABAJwIWAABAJ6ZpB2DB8ZEMAOyo9GABAAB0ImABAAB0ImAB\nAAB0ImABAAB0ImABAAB0ImABAAB0ImABAAB0ImABAAB0ImABAAB0ImABAAB0ImABAAB0ImABAAB0\nImABAAB0ImABAAB0ImABAAB0ImABAAB0ImABAAB0MvGAVVWHVNXfVNUXquq6qnr5sH6/qvpoVX1p\n+PrgGc85v6puqKovVtXPzFj/mKq6dnjsD6uqJn08AAAAW0yjB2tzkl9vrR2T5HFJXlJVxyR5VZIr\nW2tHJrlyuJ/hsTOTPDLJqUn+uKqWDPt6W5Jzkhw53E6d5IEAAADMNPGA1Vq7qbV29bD87STXJzk4\nyelJLh42uzjJM4bl05Nc2lq7s7X2lSQ3JDm+qg5Ksk9r7VOttZbknTOeAwAAMHFTvQarqg5NclyS\nTyc5sLV20/DQzUkOHJYPTnLjjKetH9YdPCzPXj9XnXOranVVrd60aVO39gMAAMw0tYBVVXsl+Ysk\n57XWbpv52NAj1XrVaq2taq2tbK2tPOCAA3rtFgAA4IdMJWBV1a4Zhat3t9beN6z+2jDsL8PXrw/r\nNyQ5ZMbTlw/rNgzLs9cDAABMxTRmEawkb09yfWvtzTMeujzJ2cPy2Uk+MGP9mVX1gKo6LKPJLD4z\nDCe8raoeN+zzuTOeAwAAMHFLp1Dzp5OcleTaqrpmWPdbSd6Q5LKqen6SdUnOSJLW2nVVdVmSL2Q0\nA+FLWmt3D897cZKLkuyR5MPDDQAAYComHrBaa3+XZGufV3XKVp5zQZIL5li/OsmKfq0DAAC4/6Y6\niyAAAMDORMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMAC\nAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADo\nRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMAC\nAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADo\nRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMAC\nAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADo\nRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMAC\nAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADo\nRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMACAADoRMAC\nAADoRMACAADoRMACAADoRMACAADoZMEHrKo6taq+WFU3VNWrpt0eAABg8VrQAauqliT5oyQ/m+SY\nJL9QVcdMt1UAAMBitaADVpLjk9zQWvun1tr3k1ya5PQptwkAAFikqrU27Tbcb1X180lOba29YLh/\nVpKfaq29dNZ25yY5d7j7iCRfnGhD+9k/yT+rp94OWG9nPjb11FNv8dTbmY9NPfXU+9E9vLV2wPY2\nWjqJlkxba21VklXTbsePqqpWt9ZWqqfejlZvZz429dRTb/HU25mPTT311JuchT5EcEOSQ2bcXz6s\nAwAAmLiFHrD+PsmRVXVYVe2W5Mwkl0+5TQAAwCK1oIcIttY2V9VLk/x1kiVJ3tFau27KzRqnSQ9z\nVE+9HbGWeuqpp97OUEs99dSbbr2xWdCTXAAAAOxIFvoQQQAAgB2GgAUAANCJgLUAVNU7qurrVfX5\nCdQ6pKr+pqq+UFXXVdXLx1xv96r6TFV9bqj3O+OsN6Pukqr6bFVdMYFaa6vq2qq6pqpWT6Deg6rq\nz6vqH6rq+qr612Os9YjhuLbcbquq88ZVb6j5iuFn5fNV9d6q2n3M9V4+1LpuHMc21+93Ve1XVR+t\nqi8NXx885nrPGo7vnqrqOkXuVur9/vDz+X+r6n9W1YPGXO8/DbWuqaqPVNWycdab8divV1Wrqv3H\nVauqXltVG2b8Dj61R62t1RvW/+rw/buuqv7LOOtV1Z/OOLa1VXXNmOs9uqo+teV8XVXHj7neT1TV\n/xn+RvxlVe3Tsd6cf8/HdX7ZRr2xnF+2Ua/7+WUbtcZybtlavRmP9z63bO34xnJ+2dbxjev8MnGt\nNbcd/JbkiUl+MsnnJ1DroCQ/OSzvneQfkxwzxnqVZK9hedckn07yuAkc568leU+SKyZQa22S/Sf4\n83JxkhcMy7sledCE6i5JcnNGH8I3rhoHJ/lKkj2G+5cled4Y661I8vkke2Y0KdDHkhzRuca9fr+T\n/JckrxqWX5Xk98Zc7+iMPoT9qiQrJ3B8/ybJ0mH59yZwfPvMWH5Zkv82znrD+kMymoBpXa/f/60c\n22uT/EbP79l26j1p+D14wHD/oeN+LWc8/qYkvz3m4/tIkp8dlp+a5Kox1/v7JCcOy7+c5D91rDfn\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x818682e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 分析第二个月的购买情况同理\n",
    "month = df_buy[(df_buy['date']>= datetime.strptime('02-01','%m-%d')) &\n",
    "                (df_buy['date']<datetime.strptime('03-01','%m-%d'))]\n",
    "# 将时间列的时间数据转换为天\n",
    "month['date'] = month['date'].apply(lambda x: x.day)\n",
    "# 聚合每天有多少个用户购买商品\n",
    "day_users = month.groupby('date')['uid'].nunique()\n",
    "day_users = day_users.to_frame().reset_index()\n",
    "day_users.columns = ['date', 'user_num']\n",
    "# 聚合每天有多少种商品被购买\n",
    "day_item = month.groupby('date')['spu_id'].nunique()\n",
    "day_item = day_item.to_frame().reset_index()\n",
    "day_item.columns = ['date', 'item_num']\n",
    "#聚合每天有多少购买记录\n",
    "day_ui = month.groupby('date').size()\n",
    "day_ui = day_ui.to_frame().reset_index()\n",
    "day_ui.columns = ['date', 'buy_num']\n",
    "\n",
    "#绘制条形图\n",
    "plt.figure(figsize=((12,8)))\n",
    "plt.bar(day_users['date'], day_users['user_num'], \n",
    "        bar_width, alpha=opacity, color='c', label='user')\n",
    "plt.bar(day_item['date']+bar_width, day_item['item_num'], \n",
    "        bar_width, alpha=opacity, color='g', label='item')\n",
    "plt.bar(day_ui['date']+bar_width*2, day_ui['buy_num'], \n",
    "        bar_width, alpha=opacity, color='m', label='user_item')\n",
    "plt.xlabel('day')\n",
    "plt.ylabel('number')\n",
    "plt.title('February Purchase Table')\n",
    "day_range = day_users['date'].values #天数\n",
    "plt.xticks(day_users['date'] + bar_width * 3 / 2., day_range)\n",
    "# plt.ylim(0, 80)\n",
    "plt.tight_layout() \n",
    "plt.legend(prop={'size':9})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\myProgramFiles\\Anaconda2\\lib\\site-packages\\ipykernel\\__main__.py:5: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x365345f8>"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAI4CAYAAAB3HEhGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X+YpFV5J/zvDQMi8kMRJAwDAgFccDASR+IaEQTdEIOi\n70ZeEkVMlNFVo5jEROK+MXHDajb+St5N3J1VI4pKSOIqwZhEMWPMZsUMiiISI65DmBkQQlQUBRk4\n+0c9Y5qenp5m+nTX1PTnc1119VNPPXXXqeo+Xf3tc55T1VoLAAAA87fbuBsAAACwqxCwAAAAOhGw\nAAAAOhGwAAAAOhGwAAAAOhGwAAAAOhGwANimqlpbVS8adzt2NpP8ulTVv6mqzbPc/saqesditglg\nVyJgASwBVbW+qr5XVd+Zclk+7nb1VlWtqu4cnt/GqnpLVe0+7nb1VFWHT/s+Tn3O36mqk8fdRoCl\nbNm4GwDAonlGa+3jC1W8qpa11rY5MrKI9X6ktXZDVf2bJGuT/GOS/7ZIj73gWmv/lGSfLderqmV4\nzuNrFQBbGMECWOKq6glV9XdV9c2q+nxVnTrtkB+uqs9U1R1V9eGqOmC43xHD6MkLq+qfknyiqk6t\nqg3T6q+vqqcO2ydV1f8eHuvmqvqvVbXnlGNbVb2sqr6S5CtV9ftV9eZp9S6vqldt73m11v4hyaeS\nrJxS++gpdd5dVb81bJ9aVRuq6ler6pYkfzjsP6uqrhme+1er6owpD/HIqvpfVfXtqvqrqjpwSu0/\nrqpbqupbVfU3VfXoKbc9vaq+NNxvY1X98pTbzhwe75vD9+Qx23ueM6mqZw/fyzuq6p+q6tdmOOYl\nw/dgU1X9wiy1Tq6qq4Y2fbaqfnxH2gSwVAhYAEtYVR2a5CNJfivJAUl+OcmfVtVBUw57fpKfT3JI\nks1Jfm9amVOSHJfkJ+bwkPcmeVWSA5P82ySnJ3nptGOeleTHkhyf5OIkP1NVuw3tPTDJU5O8fw7P\n7fgkJyf53BzalSQ/lNFr8Mgkq6vqpCTvSfLqJA9N8uQk66cc/7NJfi7JI5LsmdFrt8VHkxwz3PbZ\nJO+bcts7k7y4tbZvRuHvE0N7T0zyriQvTvLwJP89yeVV9aA5tn+qO4b2PTSj1/OXp4XD3TN6/Y9K\n8lNJfrOqnjS9SFUdkeRDSV6b0WvzH5N8qKoetgNtAlgSBCyApeNDwyjEN6vqQ8O+5yX589ban7fW\n7mutfSzJuiRPn3K/97bWvthauzPJ/5fk7GnnNf1Ga+3O1tr3tteA1trVrbVPt9Y2t9bWZxQiTpl2\n2Btaa//SWvtea+0zSb6VURBLknOSrG2tfX2Wh/lsVX0jyZ8leUeG0ag5uC/J61prdw/P5YVJ3tVa\n+9jw2mwcRsW2+MPW2j8Ox16W5LFTnue7Wmvfbq3dneQ3kvxIVe0/3HxPkuOrar/W2jdaa58d9q9O\n8t9ba1e11u5trV2c5O4kT5hj+3+gtXZla+26od2fHdo3/XV+3fAafy7JJUl+ZoZS5yX5YGvt40Ot\nP0/ypST/7oG2CWCpELAAlo5ntdYeOlyeNex7ZJLnTAle30zypIxGq7a4acr2jUn2yGgEaqbbZ1VV\nx1bVFcP0uTuS/OdptWaqd3FGQTDD1/du52F+tLX2sNbaD7fW/mNr7b45Nu+21tpdU64fluSrsxx/\ny5Tt72Y4L6qqdq/RSnxfHZ7j+uGYLc/z32cUYG+sqk9W1b8d9j8yyS9N+14cluQBL0ZSVT8+1L6t\nqr6V5AWZ/XW+cRuP88gkz5vWplU70iaApULAAljabspohOqhUy4Paa29ccoxh03ZPjyjEZh/nrKv\nTdm+M8neW64MI11Tpxu+Pck/JDmmtbZfkl9LUtPa1KZdvyTJWVX1IxlNRfxQdsx3p7YtoymBsz3u\nTUl+eAce52eTnJXRVMb9kxwx7K8kaa39fWvtrIymD34oo9GlLY930bTvxd6ttQ/sQBsuS/JHSQ5r\nre2f5N3Z+nWe/n3dNEOdm5K8Y4afj7fuQJsAlgQBC2BpuyTJM6rqJ4aRl72GBR9WTDnmeVV1fFXt\nneT1Sf6ktXbvNur9Y5K9quqnqmqPjM7ZmXoO0b4ZnR/0nRqt8vcfttfA1tqGJH+f0cjVn85lKuI2\nXJPkZ4fneUa2njI33TuT/FxVnV5Vu1XVoUObt2ffjKb23Z5RoPvPW26oqj2r6rlVtX9r7Z6MXost\nI2z/I8lLqurHauQhw+u47wN5klVVGY2m3d5au6uqnpjkOTMc+rqqevAQXM/NKJBNd3FGI5ynD6/b\ng4ft6eEUgIGABbCEtdZuymi05deS3JbRiMWrc//3h/dmNAJyS5K9krxilnrfymjRinck2ZjRiNbU\nVQV/OaMRnm9nFChm+qN+JhcnOSHbnx44m1cmeUaSbyZ5brYzEjac//VzSd6a0Xlgn8xoytz2vCej\nKXcbMzpf6dPTbj83yfph+uBLhraktbYuyflJ/muSbyS5IaOpfQ9Ia60Ndd9UVd9O8itJ/njaYfcm\nuSrJ15L8RZLXt9b+ZoZa/yejKY2/mdGo5Y0ZvY7+fgDYhhr9HgaAnVdVPTmj0bZHNm9cAOzE/AcK\ngJ3aMNXwlRmdCyRcAbBTE7AA2GlV1XEZTek7JMnbxtwcANguUwQBAAA6MYIFAADQybJxN2CxHXjg\nge2II44YdzMAAIAJcvXVV/9za+2g7R235ALWEUcckXXr1o27GQAAwASpqhvncpwpggAAAJ0IWAAA\nAJ0IWAAAAJ0suXOwAABgKbnnnnuyYcOG3HXXXeNuysTYa6+9smLFiuyxxx4P+L4CFgAA7MI2bNiQ\nfffdN0cccUSqatzN2em11nL77bdnw4YNOfLIIx/w/U0RBACAXdhdd92Vhz/84cLVHFVVHv7wh+/w\niJ+ABQAAuzjh6oGZz+tliiAAACwhazZt6lJn9fLlXersaoxgAQAAO61777133E14QAQsAACgu7Vr\n1+ZFL3rRD64fffTRufTSS3PSSSflKU95Si688MIkySc/+cmccsopOfXUU/OSl7wkrbWsX78+j3/8\n43Puuefm/PPPH9dT2CGmCAIAAIvi/e9/fy655JIce+yxue+++9JaywUXXJC1a9dm//33z6te9ap8\n5CMfycqVK7N+/fpceeWV2W+//cbd7AdEwAIAALqbaaGIN7zhDXnTm96UO++8M2effXae+MQnZv36\n9TnrrLOSJN/5znfyqEc9KitXrszKlSsnLlwlAhYAALAADjjggGzYsCFJcs0112Tz5s058sgjs2bN\nmtx999055phjcuONN+aoo47KFVdckX322SfJ6IORN27cmN13332czd9hAhYAANDdCSeckP322y+n\nnHJKTj755CxbtiyvfvWrc+211+aee+7Ji1/84lRV3vKWt+SZz3xmWmvZbbfd8ta3vnUiR662qNba\nuNuwqFatWtXWrVs37mYAAMCiuP7663PccceNuxkTZ/rrVlVXt9ZWbe9+VhEEAADoRMACAADoRMAC\nAADoRMACAADoRMACAADoRMACAADoxOdgAQDAErLm6jVd6qx+3OpZb7/lllvyO7/zO3nGM56RAw44\nII95zGO6PO7OzggWAADQ3Q/90A/lzW9+c9auXZsvfOEL427OohGwJsCmNZu2ugAAwM5s/fr1Oe20\n0/Lud787F110UU499dTce++9+eM//uOcfPLJedKTnpTXv/71SZK1a9fmtNNOy9lnn53jjjsul156\naZ7znOfkhBNOyHvf+94xP5MHxhRBAABgQey22255wQtekKOPPjrPe97z8o1vfCNvfvOb86lPfSp7\n7LFHnv3sZ+faa69Nknz729/Oxz/+8XzmM5/Js5/97Hz1q1/NXXfdldNPPz3nnnvumJ/J3AlYAADA\norjhhhty44035mlPe1qS5Jvf/GZuvPHG7LPPPnnMYx6T3XbbLStWrMixxx6bvffeO3vvvXe+973v\njbnVD4yABQAALJg999wzmzdvTpIcddRROfroo/Pxj388y5Yty3333ZfWWj71qU+lqn5wn6nbk0bA\nAgCAJWR7q//19rSnPS0XXHBBrrjiilx22WW54IILctppp2X33XfPHnvskfe85z2L2p6FVq21cbdh\nUa1ataqtW7du3M14QGZa1GL56uVjaAkAAJPm+uuvz3HHHTfuZkyc6a9bVV3dWlu1vftZRRAAAKAT\nAQsAAKATAQsAAKATAQsAAKATAQsAAKATy7QDAMASMtMK1TvCqtYzM4IFAABMnOc+97lJkvXr1+fy\nyy8fc2v+lYAFAADstO69994Z97/vfe9LImABAABLwNq1a/OiF73oB9ePPvroXHrppTnppJPylKc8\nJRdeeGGS5JOf/GROOeWUnHrqqXnJS16S1lrWr1+fxz/+8Tn33HNz/vnnz1j/6KOPTpK85S1vyUc+\n8pGceuqpufrqq3PttdfmqU99ak477bScffbZ+d73vpckOfzww7N69eqceOKJecMb3pALLrggP/Zj\nP5aXvexlXZ+3c7AAAIBF8f73vz+XXHJJjj322Nx3331preWCCy7I2rVrs//+++dVr3pVPvKRj2Tl\nypVZv359rrzyyuy3336z1vzFX/zFXHLJJXnHO96RJHnyk5+cSy65JIcffnh+93d/N+985zvz8pe/\nPLfddlt+67d+K/vvv38OPvjgfOITn8jb3va2nHjiifmXf/mXHHDAAV2eo4AFAAB0V1Vb7XvDG96Q\nN73pTbnzzjtz9tln54lPfGLWr1+fs846K0nyne98J4961KOycuXKrFy5crvhaibXXXddnv/85ydJ\n7rrrrjz1qU9NkixfvjyPeMQjkiQHHnhgTjzxxCTJoYcemm984xsCFgAAsPM64IADsmHDhiTJNddc\nk82bN+fII4/MmjVrcvfdd+eYY47JjTfemKOOOipXXHFF9tlnnyTJPffck40bN2b33Xef0+Psueee\n2bx58w+ur1y5Mh/4wAdyyCGHJEm+//3vJ9k68E293lrb8Sc6jYAFAABLyGItr37CCSdkv/32yymn\nnJKTTz45y5Yty6tf/epce+21ueeee/LiF784VZW3vOUteeYzn5nWWnbbbbe89a1vfUAjVyeccEK+\n+tWv5qd/+qfzute9Lr//+7+fF7zgBbnnnnuSJBdeeGGe9rSnLdTT3Er1TGuTYNWqVW3dunXjbsYD\nMtNnFfjcAQAA5uL666/PcccdN+5mTJzpr1tVXd1aW7W9+xnBAgAAdlqf+MQn8vrXv/5++3791389\np5122phaNDsBCwAAdnGttRkXnZgEp5122qKHqfnM8vM5WAAAsAvba6+9cvvtt3ddyGFX1lrL7bff\nnr322muH7m8ECwAAdmErVqzIhg0bctttt427KRNjr732yooVK3bovgIWAADswvbYY48ceeSR427G\nkmGKIAAAQCcLFrCq6l1VdWtVfXHKvgOq6mNV9ZXh68Om3HZhVd1QVV+uqp+Ysv9xVXXtcNvv1XB2\nXlU9qKr+aNh/VVUdsVDPBQAAYC4WcgTr3UnOmLbvNUmubK0dk+TK4Xqq6vgk5yR59HCfP6iqLR/d\n/PYk5yc5ZrhsqfnCJN9orR2d5K1JfnvBngkAAMAcLFjAaq39TZJ/mbb7rCQXD9sXJ3nWlP2Xttbu\nbq19LckNSU6qqkOS7Nda+3QbLXvynmn32VLrT5KcXpO69iQAALBLWOxzsA5urd08bN+S5OBh+9Ak\nN005bsOw79Bhe/r++92ntbY5ybeSPHymB62q1VW1rqrWWT0FAABYKGNb5GIYkVqUxfhba2taa6ta\na6sOOuigxXhIAABgCVrsgPX1Ydpfhq+3Dvs3JjlsynErhn0bh+3p++93n6palmT/JLcvWMsBAAC2\nY7ED1uVJzhu2z0vy4Sn7zxlWBjwyo8UsPjNMJ7yjqp4wnF/1/Gn32VLrp5N8ovl4agAAYIwW7IOG\nq+oDSU5NcmBVbUjyuiRvTHJZVb0wyY1Jzk6S1tp1VXVZki8l2ZzkZa21e4dSL81oRcIHJ/nocEmS\ndyZ5b1XdkNFiGucs1HMBAIBeNq3ZdL/ry1cvH1NLWAgLFrBaaz+zjZtO38bxFyW5aIb965KsnGH/\nXUmeM582AgAA9DS2RS4AAAB2NQIWAABAJwIWAABAJwIWAABAJwIWAABAJwIWAABAJwIWAABAJwIW\nAABAJwIWAABAJwIWAABAJwIWAABAJwIWAABAJwIWAABAJwIWAABAJwIWAABAJwIWAABAJwIWAABA\nJwIWAABAJwIWAABAJwIWAABAJwIWAABAJwIWAABAJwIWAABAJwIWAABAJwIWAABAJwIWAABAJwIW\nAABAJ8vG3QAAoJ9NazZttW/56uVjaAnA0iRgAQDALsI/WcbPFEEAAIBOjGABAADbZXRsboxgAQAA\ndCJgAQAAdCJgAQAAdCJgAQAAdCJgAQAAdCJgAQAAdCJgAQAAdCJgAQAAdCJgAQAAdCJgAQAAdCJg\nAQAAdLJs3A0A2GLTmk1b7Vu+evkYWgIAsGOMYAEAAHQiYAEAAHQiYAEAAHQiYAEAAHQiYAEAAHQi\nYAEAAHQiYAEAAHQiYAEAAHQiYAEAAHSybNwNAABIkk1rNm21b/nq5WNoCcCOM4IFAADQiYAFAADQ\niYAFAADQiYAFAADQiUUuAIA5sQgFwPYJWCwob8YAACwlpggCAAB0ImABAAB0YoogACyy6dOnTZ0G\n2HUYwQIAAOjECBbATs5iMQAwOYxgAQAAdCJgAQAAdCJgAQAAdCJgAQAAdGKRCwAAWCBrrl6z1b4z\nc+YYWsJiMYIFAADQiYAFAADQiSmCTCyfDQQAwM7GCBYAAEAnAhYAAEAnAhYAAEAnzsFa4pzHBAAA\n/RjBAgAA6ETAAgAA6ETAAgAA6MQ5WAAAMIVz1JkPI1gAAACdCFgAAACdjCVgVdWrquq6qvpiVX2g\nqvaqqgOq6mNV9ZXh68OmHH9hVd1QVV+uqp+Ysv9xVXXtcNvvVVWN4/kAAAAkYzgHq6oOTfKKJMe3\n1r5XVZclOSfJ8UmubK29sapek+Q1SX61qo4fbn90kuVJPl5Vx7bW7k3y9iTnJ7kqyZ8nOSPJRxf7\nOQEAS9v0c3acrwNL17imCC5L8uCqWpZk7ySbkpyV5OLh9ouTPGvYPivJpa21u1trX0tyQ5KTquqQ\nJPu11j7dWmtJ3jPlPgAAAItu0QNWa21jkjcl+ackNyf5Vmvtr5Ic3Fq7eTjsliQHD9uHJrlpSokN\nw75Dh+3p+7dSVaural1Vrbvtttu6PRcAAICpFj1gDedWnZXkyIym/D2kqp439ZhhRKr1eszW2prW\n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\nAADoRMACAADoRMACAADoRMACAADoRMACAADoZNEDVlUdVlV/XVVfqqrrquqVw/4DqupjVfWV4evD\nptznwqq6oaq+XFU/MWX/46rq2uG236uqWuznAwAAsMU4RrA2J/ml1trxSZ6Q5GVVdXyS1yS5srV2\nTJIrh+sZbjsnyaOTnJHkD6pq96HW25Ocn+SY4XLGYj4RAACAqRY9YLXWbm6tfXbY/naS65McmuSs\nJBcPh12c5FnD9llJLm2t3d1a+1qSG5KcVFWHJNmvtfbp1lpL8p4p9wEAAFh0Yz0Hq6qOSHJikquS\nHNxau3m46ZYkBw/bhya5acrdNgz7Dh22p++f6XFWV9W6qlp32223dWs/AADAVGMLWFW1T5I/TXJB\na+2OqbcNI1Kt12O11ta01la11lYddNBBvcoCAADcz1gCVlXtkVG4el9r7YPD7q8P0/4yfL112L8x\nyWFT7r5i2Ldx2J6+HwAAYCzGsYpgJXlnkutba2+ZctPlSc4bts9L8uEp+8+pqgdV1ZEZLWbxmWE6\n4R1V9YSh5vOn3AcAAGDRLRvDY/54knOTXFtV1wz7fi3JG5NcVlUvTHJjkrOTpLV2XVVdluRLGa1A\n+LLW2r3D/V6a5N1JHpzko8MFAABgLBY9YLXW/jbJtj6v6vRt3OeiJBfNsH9dkpX9WgcAALDjxrqK\nIAAAwK5EwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIA\nAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhE\nwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIA\nAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhE\nwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIA\nAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhE\nwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIAAOhEwAIA\n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\n78YAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x8184dbe0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 分析第三个月的购买情况同理\n",
    "month = df_buy[(df_buy['date']>= datetime.strptime('03-01','%m-%d')) &\n",
    "                (df_buy['date']<datetime.strptime('04-01','%m-%d'))]\n",
    "# 将时间列的时间数据转换为天\n",
    "month['date'] = month['date'].apply(lambda x: x.day)\n",
    "# 聚合每天有多少个用户购买商品\n",
    "day_users = month.groupby('date')['uid'].nunique()\n",
    "day_users = day_users.to_frame().reset_index()\n",
    "day_users.columns = ['date', 'user_num']\n",
    "# 聚合每天有多少种商品被购买\n",
    "day_item = month.groupby('date')['spu_id'].nunique()\n",
    "day_item = day_item.to_frame().reset_index()\n",
    "day_item.columns = ['date', 'item_num']\n",
    "#聚合每天有多少购买记录\n",
    "day_ui = month.groupby('date').size()\n",
    "day_ui = day_ui.to_frame().reset_index()\n",
    "day_ui.columns = ['date', 'buy_num']\n",
    "\n",
    "#绘制条形图\n",
    "plt.figure(figsize=((12,8)))\n",
    "plt.bar(day_users['date'], day_users['user_num'], \n",
    "        bar_width, alpha=opacity, color='c', label='user')\n",
    "plt.bar(day_item['date']+bar_width, day_item['item_num'], \n",
    "        bar_width, alpha=opacity, color='g', label='item')\n",
    "plt.bar(day_ui['date']+bar_width*2, day_ui['buy_num'], \n",
    "        bar_width, alpha=opacity, color='m', label='user_item')\n",
    "plt.xlabel('day')\n",
    "plt.ylabel('number')\n",
    "plt.title('may Purchase Table')\n",
    "day_range = day_users['date'].values #天数\n",
    "plt.xticks(day_users['date'] + bar_width * 3 / 2., day_range)\n",
    "# plt.ylim(0, 80)\n",
    "plt.tight_layout() \n",
    "plt.legend(prop={'size':9})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 查看特定用户对特定商品的活动轨迹"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 在数据集df_data中 用户user_id 对商品item_id 的所有数据：即活动轨迹\n",
    "def explore_user_item_trace(df_data, user_id, item_id):\n",
    "    ui = df_data[(df_data['uid']==user_id) & (df_data['spu_id']==item_id)]\n",
    "    print ui.sort_values(by='date')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "        uid   spu_id  action_type  date\n",
      "281  380056  1063802            1     3\n"
     ]
    }
   ],
   "source": [
    "explore_user_item_trace(month1,380056, 1063802)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
